package com.tripcube.system.service.impl;

import com.tripcube.system.domain.SysUserPreferences;
import com.tripcube.system.service.SysUserPreferencesService;
import com.tripcube.system.mapper.SysUserPreferencesMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;

import java.time.LocalDateTime;
import java.util.List;

/**
* @author alander
* @description 用户偏好设置表Service实现
* @createDate 2025-09-24 21:32:27
*/
@Service
public class SysUserPreferencesServiceImpl implements SysUserPreferencesService{

    @Autowired
    private SysUserPreferencesMapper userPreferencesMapper;

    /**
     * 查询用户偏好设置列表
     * 
     * @param preferences 用户偏好设置信息
     * @return 用户偏好设置集合信息
     */
    @Override
    public List<SysUserPreferences> selectUserPreferencesList(SysUserPreferences preferences) {
        return userPreferencesMapper.selectUserPreferencesList(preferences);
    }

    /**
     * 通过用户ID查询用户偏好设置
     * 
     * @param userId 用户ID
     * @return 用户偏好设置对象
     */
    @Override
    public SysUserPreferences selectUserPreferencesByUserId(Long userId) {
        return userPreferencesMapper.selectUserPreferencesByUserId(userId);
    }

    /**
     * 新增用户偏好设置
     * 
     * @param preferences 用户偏好设置信息
     * @return 结果
     */
    @Override
    public int insertUserPreferences(SysUserPreferences preferences) {
        return userPreferencesMapper.insertUserPreferences(preferences);
    }

    /**
     * 修改用户偏好设置
     * 
     * @param preferences 用户偏好设置信息
     * @return 结果
     */
    @Override
    public int updateUserPreferences(SysUserPreferences preferences) {
        return userPreferencesMapper.updateUserPreferences(preferences);
    }

    /**
     * 删除用户偏好设置信息
     * 
     * @param userId 用户ID
     * @return 结果
     */
    @Override
    public int deleteUserPreferencesByUserId(Long userId) {
        return userPreferencesMapper.deleteUserPreferencesByUserId(userId);
    }

    /**
     * 根据用户ID获取用户偏好设置
     * @param userId 用户ID
     * @return 用户偏好设置对象
     */
    @Override
    public SysUserPreferences getByUserId(Long userId) {
        SysUserPreferences sysUserPreferences = userPreferencesMapper.selectUserPreferencesByUserId(userId);
        if(sysUserPreferences == null){
            initDefault(userId);
            sysUserPreferences = userPreferencesMapper.selectUserPreferencesByUserId(userId);
        }
        return sysUserPreferences;
    }

    /**
     * 为指定用户初始化默认偏好设置
     * @param userId 用户ID
     */
    @Override
    public void initDefault(Long userId) {
        if (userId == null) {
            throw new IllegalArgumentException("用户ID不能为空");
        }

        // 检查用户是否已存在偏好设置
        SysUserPreferences existing = userPreferencesMapper.selectUserPreferencesByUserId(userId);
        if (existing != null) {
            return;
        }

        SysUserPreferences preferences = new SysUserPreferences();
        preferences.setUserId(userId);
        preferences.setDelFlag("0");
        preferences.setStatus("0");
        preferences.setCreateTime(LocalDateTime.now());

        userPreferencesMapper.insertUserPreferences(preferences);
    }

    /**
     * 根据用户ID更新偏好设置
     * @param dto 用户偏好设置数据传输对象
     */
    @Override
    public void updateByUserId(SysUserPreferences dto) {
        if (dto == null || dto.getUserId() == null) {
            throw new IllegalArgumentException("用户ID不能为空");
        }
        dto.setUpdateTime(LocalDateTime.now());
        userPreferencesMapper.updateUserPreferences(dto);
    }

    /**
     * 判断用户兴趣是否匹配指定城市标签
     * @param userId 用户ID
     * @param cityTag 城市标签
     * @return 是否匹配
     */
    @Override
    public boolean isInterestMatch(Long userId, String cityTag) {
        SysUserPreferences preferences = userPreferencesMapper.selectUserPreferencesByUserId(userId);

        if (preferences != null && preferences.getInterestTags() != null) {
            try {
                // 使用FastJSON处理JSON数组
                String interestTags = preferences.getInterestTags().toString();
                JSONArray tagsArray = JSON.parseArray(interestTags);
                return tagsArray.contains(cityTag);
            } catch (Exception e) {
                // 如果解析失败，回退到字符串分割方式
                String interestTags = preferences.getInterestTags().toString();
                String[] tags = interestTags.split(",");
                for (String tag : tags) {
                    if (tag.trim().equals(cityTag)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }
}